/**
  * 16.6 结构类型
  * 结构类型是指一组关于抽象方法、字段和类型的规格说明，举例如下：
  */

/**
  * 定义了一个函数，这个函数的参数target 的类型是 {def append(str:String):Any}，
  * 意思是，谁能当做target参数呢？
  * 只要target对象里面有append这个方法，而且参数是String Any就能够调用appendLine
  */
def appendLines(target: { def append(str: String): Any }, lines: Iterable[String]) {
  for (l <- lines) { target.append(l); target.append("\n") }
}

//你可以对任何具备 append 方法的类的实例调用 appendLines 方法，这种
//方式比定义特质更加灵活，这种方式是通过反射进行调用的
val lines = Array("Mary", "had", "a", "little", "lamb")

//builder中定义了append这个方法
val builder = new StringBuilder
appendLines(builder, lines)
println(builder)